/**
 * 通知系统测试工具
 * 用于测试通知系统的各种功能
 */
import notificationService from './notification-service.js'

/**
 * 测试聊天消息通知
 * @param {string} senderName - 发送者名称
 * @param {string} message - 消息内容
 * @param {number|string} userId - 用户ID
 */
export function testChatNotification(senderName = '测试用户', message = '这是一条测试消息', userId = '123') {
  console.log('测试聊天消息通知...')
  
  // 显示浏览器通知
  notificationService.showChatNotification(senderName, message, userId)
  
  // 保存到本地存储
  notificationService.saveNotification({
    id: `test_chat_${Date.now()}`,
    title: `来自 ${senderName} 的消息`,
    message: message,
    type: 'chat',
    timestamp: new Date().toISOString(),
    isRead: false,
    data: {
      type: 'chat',
      userId: userId,
      userName: senderName
    }
  })
  
  console.log('聊天消息通知测试完成')
}

/**
 * 测试好友请求通知
 * @param {string} senderName - 发送者名称
 * @param {number|string} userId - 用户ID
 */
export function testFriendRequestNotification(senderName = '测试好友', userId = '456') {
  console.log('测试好友请求通知...')
  
  // 显示浏览器通知
  notificationService.showFriendRequestNotification(senderName, userId)
  
  // 保存到本地存储
  notificationService.saveNotification({
    id: `test_friend_${Date.now()}`,
    title: '新的好友请求',
    message: `${senderName} 想要添加您为好友`,
    type: 'friend_request',
    timestamp: new Date().toISOString(),
    isRead: false,
    data: {
      type: 'friend_request',
      userId: userId,
      userName: senderName
    }
  })
  
  console.log('好友请求通知测试完成')
}

/**
 * 测试积分变动通知
 * @param {number} points - 积分变化量
 * @param {string} reason - 变化原因
 */
export function testPointsNotification(points = 100, reason = '每日登录奖励') {
  console.log('测试积分变动通知...')
  
  // 显示浏览器通知
  notificationService.showPointsNotification(points, reason)
  
  // 保存到本地存储
  notificationService.saveNotification({
    id: `test_points_${Date.now()}`,
    title: points > 0 ? '积分增加' : '积分减少',
    message: `${points > 0 ? '+' : ''}${points} 积分 - ${reason}`,
    type: 'points',
    timestamp: new Date().toISOString(),
    isRead: false,
    data: {
      type: 'points',
      points: points,
      reason: reason
    }
  })
  
  console.log('积分变动通知测试完成')
}

/**
 * 测试系统通知
 * @param {string} title - 通知标题
 * @param {string} message - 通知内容
 */
export function testSystemNotification(title = '系统通知', message = '这是一条系统通知') {
  console.log('测试系统通知...')
  
  // 显示浏览器通知
  notificationService.showSystemNotification(title, message)
  
  // 保存到本地存储
  notificationService.saveNotification({
    id: `test_system_${Date.now()}`,
    title: title,
    message: message,
    type: 'system',
    timestamp: new Date().toISOString(),
    isRead: false,
    data: {
      type: 'system'
    }
  })
  
  console.log('系统通知测试完成')
}

/**
 * 测试游戏通知
 * @param {string} title - 通知标题
 * @param {string} message - 通知内容
 * @param {string} gameType - 游戏类型
 */
export function testGameNotification(title = '游戏通知', message = '您的游戏进度已保存', gameType = 'survival') {
  console.log('测试游戏通知...')
  
  // 显示浏览器通知
  notificationService.showGameNotification(title, message, gameType)
  
  // 保存到本地存储
  notificationService.saveNotification({
    id: `test_game_${Date.now()}`,
    title: title,
    message: message,
    type: 'game',
    timestamp: new Date().toISOString(),
    isRead: false,
    data: {
      type: 'game',
      gameType: gameType
    }
  })
  
  console.log('游戏通知测试完成')
}

/**
 * 运行所有通知测试
 */
export function runAllNotificationTests() {
  console.log('开始运行所有通知测试...')
  
  // 延迟执行各种通知测试，避免同时触发
  setTimeout(() => testChatNotification(), 500)
  setTimeout(() => testFriendRequestNotification(), 1500)
  setTimeout(() => testPointsNotification(), 2500)
  setTimeout(() => testSystemNotification(), 3500)
  setTimeout(() => testGameNotification(), 4500)
  
  console.log('所有通知测试已安排执行')
}

/**
 * 清除所有通知测试数据
 */
export function clearNotificationTests() {
  console.log('清除所有通知测试数据...')
  
  try {
    // 获取现有通知
    const notifications = JSON.parse(uni.getStorageSync('notifications') || '[]')
    
    // 过滤掉测试通知
    const filteredNotifications = notifications.filter(n => !n.id.startsWith('test_'))
    
    // 保存过滤后的通知
    uni.setStorageSync('notifications', JSON.stringify(filteredNotifications))
    
    // 更新通知角标
    notificationService.updateUnreadBadge()
    
    console.log('通知测试数据已清除')
  } catch (error) {
    console.error('清除通知测试数据失败:', error)
  }
}

export default {
  testChatNotification,
  testFriendRequestNotification,
  testPointsNotification,
  testSystemNotification,
  testGameNotification,
  runAllNotificationTests,
  clearNotificationTests
}
